package org.qqcui.designpattern.principles.dip;


/**
 * 依赖倒置原则示例一，违反了依赖倒置原则，依赖了具体地实现类，而不是抽象类
 * 具体实现类在实际情况中变动的可能性比较大，这样就有可能会导致业务类代码潜在的错误
 *
 * @author cuiqingqiang
 * @version 1.0
 * @date 2020-10-13 22:17
 **/
public class DependencyInversion1 {
	public static void main(String[] args) {
		Person person = new Person();
		person.receive(new Email());
	}
}

class Email {
	public String getInfo() {
		return "接收邮件信息：Hello, World";
	}
}

/**
 * 完成Person接收消息的功能
 * 方式一分析：
 * （1）简单，比较容易想到
 * （2）如果我们获取的对象是微信、短信等，则新增类，同时Person类中也要新增相应的方法
 * （3）解决思路：
 *  引入一个抽象的接口IReceiver，表示接收者，这样Person与IReceiver发生依赖，因为Email、Message等属于接受的范畴，
 *  他们各自实现IReceiver接口就OK，这样我们就符合依赖倒置原则
 */
class Person {
	/**
	 *	依赖了具体地实现类，而不是实现类的抽象类或接口
	 */
	public void receive(Email email) {
		System.out.println(email.getInfo());
	}
}
